package ThreadDemo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 34255
 * Date: 2024-10-19
 * Time: 10:05
 */
//wait notify使用
public class Demo18 {
    public static void main2(String[] args) throws InterruptedException {
        System.out.println("wait()使用之前");
        synchronized (Object.class){
            Object.class.wait();//wait()的使用必须依赖于锁对象，因为wait()第一件做的事就是
            //释放锁对象，所以在使用时必须处于加锁状态，当其他线程执行到notify()时，线程重新获得该锁对象
            //继续执行后续任务
        }
        System.out.println("wait()使用之后");
    }
    public static void main1(String[] args) throws InterruptedException {
        System.out.println("wait使用之前");
        //创建Object对象
        Object object = new Object();
        //调用wait()方法，他会让当前线程暂时放弃锁对象，让其他线程持有，等到其他线程执行到一定过程之后，再次重新持有锁对象
        object.wait();
        //直接使用wait()方法的话，运行会直接抛非法锁状态异常，因为wait()的使用依赖于锁对象，使用wait()的对象必须处于加锁状态
        System.out.println("wait使用之后");
    }
}
